/*
 *  Common.h
 *  NewtonTest
 *
 *  Created by Holmes Futrell on 4/2/07.
 *  Copyright 2007 __MyCompanyName__. All rights reserved.
 *
 */

//#ifndef COMMON
//#define COMMON

#import "platform.h"

typedef struct _vec2{
	GLfloat coords[2];
} vec2;

typedef struct _vec3 {
	float coords[3];
} vec3;

typedef struct _vec4{
	GLfloat coords[4];
} vec4;

typedef struct _triangle{
	int v1, v2, v3;
	int n1, n2, n3;
	int t1, t2, t3;
	int fsn;	/* flat shading normal, literally perpendicular to face */
} triangle;


void transpose_mat3(float *mat);

vec2 make_vec2(float x, float y);
vec3 make_vec3(float x, float y, float z);
vec4 make_vec4(float x, float y, float z, float w);
vec3 zero_vec3(void);

int equal_vec3(vec3 v1, vec3 v2);

float mag_vec3(vec3 v);
float mag_vec2(vec2 v);

vec3 normalize_vec3(vec3 v);
vec2 normalize_vec2(vec2 v);

vec3 difference_vec3(vec3 v1, vec3 v2);
vec2 difference_vec2(vec2 v1, vec2 v2);

vec3 scalar_multiply_vec3(float a, vec3 v);

vec3 cross_vec3(vec3 v1, vec3 v2);

void build_mat3(float *mat, vec3 v1, vec3 v2, vec3 v3);
void set_translation(float matrix[16], vec3 v);
void identity_matrix(float matrix[16]);

float dot_vec3(vec3 v1, vec3 v2);
float dot_vec4(vec4 v1, vec4 v2);

vec3 add_vec3(vec3 v1, vec3 v2);

void describe_vec3(vec3 v);

//#endif
